home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 July: Mac OS SDK / Dev.CD Jul 97 SDK2.toast / Development Kits (Disc 2) / QuickTime™ VR 2.0 SDK / Documentation + Extras / Updated Interfaces / QuickDraw 3D 1.5 Interfaces / Interfaces / QD3DGeometry.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-05-22  |  64.3 KB  |  2,220 lines  |  [TEXT/MPS ]

  1. /******************************************************************************
  2.  **                                                                             **
  3.  **     Module:        QD3DGeometry.h                                             **
  4.  **                                                                          **
  5.  **                                                                          **
  6.  **     Purpose:     Geometric primitives - data structures and routines         **
  7.  **                                                                          **
  8.  **                                                                          **
  9.  **                                                                          **
  10.  **     Copyright (C) 1991-1996 Apple Computer, Inc. All rights reserved.     **
  11.  **                                                                             **
  12.  **                                                                          **
  13.  *****************************************************************************/
  14. #ifndef QD3DGeometry_h
  15. #define QD3DGeometry_h
  16.  
  17. #if defined(PRAGMA_ONCE) && PRAGMA_ONCE
  18.     #pragma once
  19. #endif  /*  PRAGMA_ONCE  */
  20.  
  21. #include "QD3DSet.h"
  22.  
  23. #if defined(THINK_C) || defined(__SC__)
  24.     #pragma options(!pack_enums, !align_arrays)
  25.     #pragma SC options align=power
  26. #elif defined(__MWERKS__)
  27.     #pragma enumsalwaysint on
  28.     #pragma align_array_members off
  29.     #pragma options align=native
  30. #elif defined(__PPCC__)
  31.     #pragma options align=power
  32. #elif defined(__xlc) || defined(__xlC) || defined(__xlC__) || defined(__XLC121__)
  33.     #pragma options enum=int
  34. #endif
  35.  
  36. #ifdef __cplusplus
  37. extern "C" {
  38. #endif    /* __cplusplus */
  39.  
  40. /******************************************************************************
  41.  **                                                                             **
  42.  **                                Geometry Routines                             **
  43.  **                                                                             **
  44.  *****************************************************************************/
  45.  
  46. QD3D_EXPORT TQ3ObjectType QD3D_CALL Q3Geometry_GetType(
  47.     TQ3GeometryObject    geometry);
  48.  
  49. QD3D_EXPORT TQ3Status QD3D_CALL Q3Geometry_GetAttributeSet(
  50.     TQ3GeometryObject    geometry,
  51.     TQ3AttributeSet        *attributeSet);
  52.  
  53. QD3D_EXPORT TQ3Status QD3D_CALL Q3Geometry_SetAttributeSet(
  54.     TQ3GeometryObject    geometry,
  55.     TQ3AttributeSet        attributeSet);
  56.  
  57. QD3D_EXPORT TQ3Status QD3D_CALL Q3Geometry_Submit(
  58.     TQ3GeometryObject    geometry, 
  59.     TQ3ViewObject        view);
  60.  
  61.  
  62. /******************************************************************************
  63.  **                                                                             **
  64.  **                            Box    Data Structure Definitions                     **
  65.  **                                                                             **
  66.  *****************************************************************************/
  67.  
  68. typedef struct TQ3BoxData {
  69.     TQ3Point3D            origin;
  70.     TQ3Vector3D            orientation;
  71.     TQ3Vector3D            majorAxis;
  72.     TQ3Vector3D            minorAxis;
  73.     TQ3AttributeSet        *faceAttributeSet;    /* Ordering : Left, right,     */
  74.                                             /*              front, back,     */
  75.                                             /*              top, bottom    */
  76.     TQ3AttributeSet        boxAttributeSet;
  77. } TQ3BoxData;
  78.  
  79.  
  80. /******************************************************************************
  81.  **                                                                             **
  82.  **                                Box Routines                                 **
  83.  **                                                                             **
  84.  *****************************************************************************/
  85.  
  86. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3Box_New(
  87.     const TQ3BoxData    *boxData);
  88.  
  89. QD3D_EXPORT TQ3Status QD3D_CALL Q3Box_Submit(
  90.     const TQ3BoxData    *boxData,
  91.     TQ3ViewObject        view);
  92.     
  93. QD3D_EXPORT TQ3Status QD3D_CALL Q3Box_SetData(
  94.     TQ3GeometryObject    box, 
  95.     const TQ3BoxData    *boxData);
  96.  
  97. QD3D_EXPORT TQ3Status QD3D_CALL Q3Box_GetData(
  98.     TQ3GeometryObject    box,
  99.     TQ3BoxData            *boxData);
  100.  
  101. QD3D_EXPORT TQ3Status QD3D_CALL Q3Box_EmptyData(
  102.     TQ3BoxData            *boxData);
  103.     
  104. QD3D_EXPORT TQ3Status QD3D_CALL Q3Box_SetOrigin(
  105.     TQ3GeometryObject    box,
  106.     const TQ3Point3D    *origin);
  107.  
  108. QD3D_EXPORT TQ3Status QD3D_CALL Q3Box_SetOrientation(
  109.     TQ3GeometryObject    box,
  110.     const TQ3Vector3D    *orientation);
  111.  
  112. QD3D_EXPORT TQ3Status QD3D_CALL Q3Box_SetMajorAxis(
  113.     TQ3GeometryObject    box,
  114.     const TQ3Vector3D    *majorAxis);
  115.  
  116. QD3D_EXPORT TQ3Status QD3D_CALL Q3Box_SetMinorAxis(
  117.     TQ3GeometryObject    box,
  118.     const TQ3Vector3D    *minorAxis);
  119.  
  120. QD3D_EXPORT TQ3Status QD3D_CALL Q3Box_GetOrigin(
  121.     TQ3GeometryObject    box,
  122.     TQ3Point3D            *origin);
  123.  
  124. QD3D_EXPORT TQ3Status QD3D_CALL Q3Box_GetOrientation(
  125.     TQ3GeometryObject    box,
  126.     TQ3Vector3D            *orientation);
  127.  
  128. QD3D_EXPORT TQ3Status QD3D_CALL Q3Box_GetMajorAxis(
  129.     TQ3GeometryObject    box,
  130.     TQ3Vector3D            *majorAxis);
  131.  
  132. QD3D_EXPORT TQ3Status QD3D_CALL Q3Box_GetMinorAxis(
  133.     TQ3GeometryObject    box,
  134.     TQ3Vector3D            *minorAxis);
  135.  
  136. QD3D_EXPORT TQ3Status QD3D_CALL Q3Box_GetFaceAttributeSet(
  137.     TQ3GeometryObject    box,
  138.     unsigned long        faceIndex,
  139.     TQ3AttributeSet        *faceAttributeSet);
  140.  
  141. QD3D_EXPORT TQ3Status QD3D_CALL Q3Box_SetFaceAttributeSet(
  142.     TQ3GeometryObject    box,
  143.     unsigned long        faceIndex,
  144.     TQ3AttributeSet        faceAttributeSet);
  145.  
  146.  
  147. /******************************************************************************
  148.  **                                                                             **
  149.  **                        Cone Data Structure Definitions                          **
  150.  **                                                                             **
  151.  *****************************************************************************/
  152.  
  153. typedef struct TQ3ConeData {
  154.     TQ3Point3D            origin;
  155.     TQ3Vector3D            orientation;
  156.     TQ3Vector3D            majorRadius;
  157.     TQ3Vector3D            minorRadius;
  158.     float                uMin, uMax,
  159.                         vMin, vMax;
  160.     TQ3EndCap            caps;
  161.     TQ3AttributeSet        interiorAttributeSet;
  162.     TQ3AttributeSet        faceAttributeSet;
  163.     TQ3AttributeSet        bottomAttributeSet;
  164.     TQ3AttributeSet        coneAttributeSet;
  165. } TQ3ConeData;
  166.  
  167.  
  168. /******************************************************************************
  169.  **                                                                             **
  170.  **                                Cone Routines                                 **
  171.  **                                                                             **
  172.  *****************************************************************************/
  173.  
  174. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3Cone_New(
  175.     const TQ3ConeData        *coneData);
  176.  
  177. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_Submit(
  178.     const TQ3ConeData        *coneData, 
  179.     TQ3ViewObject            view);
  180.  
  181. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_SetData(
  182.     TQ3GeometryObject        cone, 
  183.     const TQ3ConeData        *coneData);
  184.  
  185. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_GetData(
  186.     TQ3GeometryObject        cone,
  187.     TQ3ConeData                *coneData);
  188.  
  189. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_SetOrigin(
  190.     TQ3GeometryObject        cone,
  191.     const TQ3Point3D        *origin);
  192.  
  193. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_SetOrientation(
  194.     TQ3GeometryObject        cone,
  195.     const TQ3Vector3D        *orientation);
  196.  
  197. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_SetMajorRadius(
  198.     TQ3GeometryObject        cone,
  199.     const TQ3Vector3D        *majorRadius);
  200.  
  201. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_SetMinorRadius(
  202.     TQ3GeometryObject        cone,
  203.     const TQ3Vector3D        *minorRadius);
  204.  
  205. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_GetOrigin(
  206.     TQ3GeometryObject        cone,
  207.     TQ3Point3D                *origin);
  208.  
  209. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_GetOrientation(
  210.     TQ3GeometryObject        cone,
  211.     TQ3Vector3D                *orientation);
  212.  
  213. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_GetMajorRadius(
  214.     TQ3GeometryObject        cone,
  215.     TQ3Vector3D                *majorRadius);
  216.  
  217. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_GetMinorRadius(
  218.     TQ3GeometryObject        cone,
  219.     TQ3Vector3D                *minorRadius);
  220.     
  221. #if defined(ESCHER_VER_FUTURE) && ESCHER_VER_FUTURE
  222.  
  223. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_SetParameterLimits(
  224.     TQ3GeometryObject        cone,
  225.     const float                uMin,
  226.     const float                uMax,
  227.     const float                vMin,
  228.     const float                vMax);
  229.                             
  230. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_GetParameterLimits(
  231.     TQ3GeometryObject        cone,
  232.     float                    *uMin,
  233.     float                    *uMax,
  234.     float                    *vMin,
  235.     float                    *vMax);
  236.  
  237. #endif  /*  ESCHER_VER_FUTURE  */
  238.  
  239. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_SetCaps(
  240.     TQ3GeometryObject        cone,
  241.     TQ3EndCap                caps);
  242.  
  243. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_GetCaps(
  244.     TQ3GeometryObject        cone,
  245.     TQ3EndCap                *caps);
  246.  
  247. #if defined(ESCHER_VER_FUTURE) && ESCHER_VER_FUTURE
  248.  
  249. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_SetInteriorAttributeSet(
  250.     TQ3GeometryObject        cone,
  251.     TQ3AttributeSet            interiorAttributeSet);
  252.  
  253. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_GetInteriorAttributeSet(
  254.     TQ3GeometryObject        cone,
  255.     TQ3AttributeSet            *interiorAttributeSet);
  256.  
  257. #endif  /*  ESCHER_VER_FUTURE  */
  258.  
  259. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_SetBottomAttributeSet(
  260.     TQ3GeometryObject        cone,
  261.     TQ3AttributeSet            bottomAttributeSet);
  262.  
  263. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_GetBottomAttributeSet(
  264.     TQ3GeometryObject        cone,
  265.     TQ3AttributeSet            *bottomAttributeSet);
  266.  
  267. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_SetFaceAttributeSet(
  268.     TQ3GeometryObject        cone,
  269.     TQ3AttributeSet            faceAttributeSet);
  270.  
  271. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_GetFaceAttributeSet(
  272.     TQ3GeometryObject        cone,
  273.     TQ3AttributeSet            *faceAttributeSet);
  274.  
  275. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_EmptyData(
  276.     TQ3ConeData                *coneData);
  277.  
  278.  
  279. /******************************************************************************
  280.  **                                                                             **
  281.  **                        Cylinder Data Structure Definitions                     **
  282.  **                                                                             **
  283.  *****************************************************************************/
  284.  
  285. typedef struct TQ3CylinderData {
  286.     TQ3Point3D            origin;
  287.     TQ3Vector3D            orientation;
  288.     TQ3Vector3D            majorRadius;
  289.     TQ3Vector3D            minorRadius;
  290.     float                uMin, uMax,
  291.                         vMin, vMax;
  292.     TQ3EndCap             caps;
  293.     TQ3AttributeSet        interiorAttributeSet;
  294.     TQ3AttributeSet        topAttributeSet;
  295.     TQ3AttributeSet        faceAttributeSet;
  296.     TQ3AttributeSet        bottomAttributeSet;
  297.     TQ3AttributeSet        cylinderAttributeSet;
  298. } TQ3CylinderData;
  299.  
  300.  
  301. /******************************************************************************
  302.  **                                                                             **
  303.  **                            Cylinder Routines                                 **
  304.  **                                                                             **
  305.  *****************************************************************************/
  306.  
  307. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3Cylinder_New(
  308.     const TQ3CylinderData    *cylinderData);
  309.  
  310. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_Submit(
  311.     const TQ3CylinderData    *cylinderData,
  312.     TQ3ViewObject            view);
  313.     
  314. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_SetData(
  315.     TQ3GeometryObject        cylinder, 
  316.     const TQ3CylinderData    *cylinderData);
  317.  
  318. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_GetData(
  319.     TQ3GeometryObject        cylinder,
  320.     TQ3CylinderData            *cylinderData);
  321.  
  322. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_SetOrigin(
  323.     TQ3GeometryObject        cylinder,
  324.     const TQ3Point3D        *origin);
  325.  
  326. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_SetOrientation(
  327.     TQ3GeometryObject        cylinder,
  328.     const TQ3Vector3D        *orientation);
  329.  
  330. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_SetMajorRadius(
  331.     TQ3GeometryObject        cylinder,
  332.     const TQ3Vector3D        *majorRadius);
  333.  
  334. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_SetMinorRadius(
  335.     TQ3GeometryObject        cylinder,
  336.     const TQ3Vector3D        *minorRadius);
  337.  
  338. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_GetOrigin(
  339.     TQ3GeometryObject        cylinder,
  340.     TQ3Point3D                *origin);
  341.  
  342. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_GetOrientation(
  343.     TQ3GeometryObject        cylinder,
  344.     TQ3Vector3D                *orientation);
  345.  
  346. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_GetMajorRadius(
  347.     TQ3GeometryObject        cylinder,
  348.     TQ3Vector3D                *majorRadius);
  349.  
  350. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_GetMinorRadius(
  351.     TQ3GeometryObject        cylinder,
  352.     TQ3Vector3D                *minorRadius);
  353.  
  354. #if defined(ESCHER_VER_FUTURE) && ESCHER_VER_FUTURE
  355.  
  356. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_SetParameterLimits(
  357.     TQ3GeometryObject        cylinder,
  358.     const float                uMin,
  359.     const float                uMax,
  360.     const float                vMin,
  361.     const float                vMax);
  362.                             
  363. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_GetParameterLimits(
  364.     TQ3GeometryObject        cylinder,
  365.     float                    *uMin,
  366.     float                    *uMax,
  367.     float                    *vMin,
  368.     float                    *vMax);
  369.                             
  370. #endif  /*  ESCHER_VER_FUTURE  */
  371.  
  372. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_SetCaps(
  373.     TQ3GeometryObject        cylinder,
  374.     TQ3EndCap                caps);
  375.  
  376. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_GetCaps(
  377.     TQ3GeometryObject        cylinder,
  378.     TQ3EndCap                *caps);
  379.  
  380. #if defined(ESCHER_VER_FUTURE) && ESCHER_VER_FUTURE
  381.  
  382. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_SetInteriorAttributeSet(
  383.     TQ3GeometryObject        cylinder,
  384.     TQ3AttributeSet            interiorAttributeSet);
  385.  
  386. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_GetInteriorAttributeSet(
  387.     TQ3GeometryObject        cylinder,
  388.     TQ3AttributeSet            *interiorAttributeSet);
  389.  
  390. #endif  /*  ESCHER_VER_FUTURE  */
  391.  
  392. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_SetTopAttributeSet(
  393.     TQ3GeometryObject        cylinder,
  394.     TQ3AttributeSet            topAttributeSet);
  395.  
  396. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_GetTopAttributeSet(
  397.     TQ3GeometryObject        cylinder,
  398.     TQ3AttributeSet            *topAttributeSet);
  399.  
  400. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_SetBottomAttributeSet(
  401.     TQ3GeometryObject        cylinder,
  402.     TQ3AttributeSet            bottomAttributeSet);
  403.  
  404. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_GetBottomAttributeSet(
  405.     TQ3GeometryObject        cylinder,
  406.     TQ3AttributeSet            *bottomAttributeSet);
  407.  
  408. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_SetFaceAttributeSet(
  409.     TQ3GeometryObject        cylinder,
  410.     TQ3AttributeSet            faceAttributeSet);
  411.  
  412. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_GetFaceAttributeSet(
  413.     TQ3GeometryObject        cylinder,
  414.     TQ3AttributeSet            *faceAttributeSet);
  415.  
  416. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_EmptyData(
  417.     TQ3CylinderData            *cylinderData);
  418.  
  419.  
  420. /******************************************************************************
  421.  **                                                                             **
  422.  **                        Disk Data Structure Definitions                         **
  423.  **                                                                             **
  424.  *****************************************************************************/
  425.  
  426. typedef struct TQ3DiskData {
  427.     TQ3Point3D            origin;
  428.     TQ3Vector3D            majorRadius;
  429.     TQ3Vector3D         minorRadius;
  430.     float                uMin, uMax,
  431.                         vMin, vMax;
  432.     TQ3AttributeSet        diskAttributeSet;
  433. } TQ3DiskData;
  434.  
  435.  
  436. /******************************************************************************
  437.  **                                                                             **
  438.  **                                Disk Routines                                  **
  439.  **                                                                             **
  440.  *****************************************************************************/
  441.  
  442. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3Disk_New(
  443.     const TQ3DiskData        *diskData);
  444.  
  445. QD3D_EXPORT TQ3Status QD3D_CALL Q3Disk_Submit(
  446.     const TQ3DiskData        *diskData, 
  447.     TQ3ViewObject            view);
  448.     
  449. QD3D_EXPORT TQ3Status QD3D_CALL Q3Disk_SetData(
  450.     TQ3GeometryObject        disk, 
  451.     const TQ3DiskData        *diskData);
  452.  
  453. QD3D_EXPORT TQ3Status QD3D_CALL Q3Disk_GetData(
  454.     TQ3GeometryObject        disk, 
  455.     TQ3DiskData                *diskData);
  456.  
  457. QD3D_EXPORT TQ3Status QD3D_CALL Q3Disk_SetOrigin(
  458.     TQ3GeometryObject        disk,
  459.     const TQ3Point3D        *origin);
  460.  
  461. QD3D_EXPORT TQ3Status QD3D_CALL Q3Disk_SetMajorRadius(
  462.     TQ3GeometryObject        disk,
  463.     const TQ3Vector3D        *majorRadius);
  464.  
  465. QD3D_EXPORT TQ3Status QD3D_CALL Q3Disk_SetMinorRadius(
  466.     TQ3GeometryObject        disk,
  467.     const TQ3Vector3D        *minorRadius);
  468.  
  469. QD3D_EXPORT TQ3Status QD3D_CALL Q3Disk_GetOrigin(
  470.     TQ3GeometryObject        disk,
  471.     TQ3Point3D                *origin);
  472.  
  473. QD3D_EXPORT TQ3Status QD3D_CALL Q3Disk_GetMajorRadius(
  474.     TQ3GeometryObject        disk,
  475.     TQ3Vector3D                *majorRadius);
  476.  
  477. QD3D_EXPORT TQ3Status QD3D_CALL Q3Disk_GetMinorRadius(
  478.     TQ3GeometryObject        disk,
  479.     TQ3Vector3D                *minorRadius);
  480.         
  481. #if defined(ESCHER_VER_FUTURE) && ESCHER_VER_FUTURE
  482.  
  483. QD3D_EXPORT TQ3Status QD3D_CALL Q3Disk_SetParameterLimits(
  484.     TQ3GeometryObject        disk,
  485.     const float                uMin,
  486.     const float                uMax,
  487.     const float                vMin,
  488.     const float                vMax);
  489.                             
  490. QD3D_EXPORT TQ3Status QD3D_CALL Q3Disk_GetParameterLimits(
  491.     TQ3GeometryObject        disk,
  492.     float                    *uMin,
  493.     float                    *uMax,
  494.     float                    *vMin,
  495.     float                    *vMax);
  496.  
  497. #endif  /*  ESCHER_VER_FUTURE  */
  498.  
  499. QD3D_EXPORT TQ3Status QD3D_CALL Q3Disk_EmptyData(
  500.     TQ3DiskData                *diskData);
  501.  
  502.  
  503. /******************************************************************************
  504.  **                                                                             **
  505.  **                            Data Structure Definitions                         **
  506.  **                                                                             **
  507.  *****************************************************************************/
  508.  
  509. typedef struct TQ3EllipseData {
  510.     TQ3Point3D            origin;
  511.     TQ3Vector3D            majorRadius;
  512.     TQ3Vector3D            minorRadius;
  513.     float                uMin, uMax;
  514.     TQ3AttributeSet        ellipseAttributeSet;
  515. } TQ3EllipseData;
  516.  
  517.  
  518. /******************************************************************************
  519.  **                                                                             **
  520.  **                                Ellipse Routines                             **
  521.  **                                                                             **
  522.  *****************************************************************************/
  523.  
  524. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3Ellipse_New(
  525.     const TQ3EllipseData    *ellipseData);
  526.  
  527. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipse_Submit(
  528.     const TQ3EllipseData    *ellipseData,
  529.     TQ3ViewObject            view);
  530.     
  531. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipse_SetData(
  532.     TQ3GeometryObject        ellipse, 
  533.     const TQ3EllipseData    *ellipseData);
  534.  
  535. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipse_GetData(
  536.     TQ3GeometryObject        ellipse,
  537.     TQ3EllipseData            *ellipseData);
  538.  
  539. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipse_SetOrigin(
  540.     TQ3GeometryObject        ellipse,
  541.     const TQ3Point3D        *origin);
  542.  
  543. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipse_SetMajorRadius(
  544.     TQ3GeometryObject        ellipse,
  545.     const TQ3Vector3D        *majorRadius);
  546.  
  547. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipse_SetMinorRadius(
  548.     TQ3GeometryObject        ellipse,
  549.     const TQ3Vector3D        *minorRadius);
  550.  
  551. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipse_GetOrigin(
  552.     TQ3GeometryObject        ellipse,
  553.     TQ3Point3D                *origin);
  554.  
  555. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipse_GetMajorRadius(
  556.     TQ3GeometryObject        ellipse,
  557.     TQ3Vector3D                *majorRadius);
  558.  
  559. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipse_GetMinorRadius(
  560.     TQ3GeometryObject        ellipse,
  561.     TQ3Vector3D                *minorRadius);
  562.  
  563. #if defined(ESCHER_VER_FUTURE) && ESCHER_VER_FUTURE
  564.  
  565. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipse_SetParameterLimits(
  566.     TQ3GeometryObject        ellipse,
  567.     const float                uMin,
  568.     const float                uMax);
  569.                             
  570. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipse_GetParameterLimits(
  571.     TQ3GeometryObject        ellipse,
  572.     float                    *uMin,
  573.     float                    *uMax);
  574.  
  575. #endif  /*  ESCHER_VER_FUTURE  */
  576.  
  577. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipse_EmptyData(
  578.     TQ3EllipseData            *ellipseData);
  579.  
  580.  
  581. /******************************************************************************
  582.  **                                                                          **
  583.  **                            Ellipsoid Data structures                         **
  584.  **                                                                          **
  585.  *****************************************************************************/
  586.  
  587. typedef struct TQ3EllipsoidData {
  588.     TQ3Point3D            origin;
  589.     TQ3Vector3D            orientation;
  590.     TQ3Vector3D            majorRadius;
  591.     TQ3Vector3D            minorRadius;
  592.     float                uMin, uMax,
  593.                         vMin, vMax;
  594.     TQ3EndCap            caps;
  595.     TQ3AttributeSet        interiorAttributeSet;
  596.     TQ3AttributeSet        ellipsoidAttributeSet;
  597. } TQ3EllipsoidData;
  598.  
  599.  
  600. /******************************************************************************
  601.  **                                                                          **
  602.  **                            Procedures                                        **
  603.  **                                                                          **
  604.  *****************************************************************************/
  605.  
  606. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3Ellipsoid_New(
  607.     const TQ3EllipsoidData    *ellipsoidData);
  608.  
  609. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipsoid_Submit(
  610.     const TQ3EllipsoidData    *ellipsoidData, 
  611.     TQ3ViewObject            view);
  612.     
  613. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipsoid_SetData(
  614.     TQ3GeometryObject        ellipsoid, 
  615.     const TQ3EllipsoidData    *ellipsoidData);
  616.  
  617. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipsoid_GetData(
  618.     TQ3GeometryObject        ellipsoid,
  619.     TQ3EllipsoidData        *ellipsoidData);
  620.  
  621. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipsoid_SetOrigin(
  622.     TQ3GeometryObject        ellipsoid,
  623.     const TQ3Point3D        *origin);
  624.  
  625. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipsoid_SetOrientation(
  626.     TQ3GeometryObject        ellipsoid,
  627.     const TQ3Vector3D        *orientation);
  628.  
  629. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipsoid_SetMajorRadius(
  630.     TQ3GeometryObject        ellipsoid,
  631.     const TQ3Vector3D        *majorRadius);
  632.  
  633. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipsoid_SetMinorRadius(
  634.     TQ3GeometryObject        ellipsoid,
  635.     const TQ3Vector3D        *minorRadius);
  636.  
  637. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipsoid_GetOrigin(
  638.     TQ3GeometryObject        ellipsoid,
  639.     TQ3Point3D                *origin);
  640.  
  641. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipsoid_GetOrientation(
  642.     TQ3GeometryObject        ellipsoid,
  643.     TQ3Vector3D                *orientation);
  644.  
  645. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipsoid_GetMajorRadius(
  646.     TQ3GeometryObject        ellipsoid,
  647.     TQ3Vector3D                *majorRadius);
  648.  
  649. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipsoid_GetMinorRadius(
  650.     TQ3GeometryObject        ellipsoid,
  651.     TQ3Vector3D                *minorRadius);
  652.  
  653. #if defined(ESCHER_VER_FUTURE) && ESCHER_VER_FUTURE
  654.  
  655. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipsoid_SetParameterLimits(
  656.     TQ3GeometryObject        ellipsoid,
  657.     const float                uMin,
  658.     const float                uMax,
  659.     const float                vMin,
  660.     const float                vMax);
  661.                             
  662. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipsoid_GetParameterLimits(
  663.     TQ3GeometryObject        ellipsoid,
  664.     float                    *uMin,
  665.     float                    *uMax,
  666.     float                    *vMin,
  667.     float                    *vMax);
  668.  
  669. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipsoid_SetCaps(
  670.     TQ3GeometryObject        ellipsoid,
  671.     TQ3EndCap                caps);
  672.  
  673. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipsoid_GetCaps(
  674.     TQ3GeometryObject        ellipsoid,
  675.     TQ3EndCap                *caps);
  676.  
  677. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipsoid_SetInteriorAttributeSet(
  678.     TQ3GeometryObject        ellipsoid,
  679.     TQ3AttributeSet            interiorAttributeSet);
  680.  
  681. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipsoid_GetInteriorAttributeSet(
  682.     TQ3GeometryObject        ellipsoid,
  683.     TQ3AttributeSet            *interiorAttributeSet);
  684.  
  685. #endif  /*  ESCHER_VER_FUTURE  */
  686.  
  687. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipsoid_EmptyData(
  688.     TQ3EllipsoidData        *ellipsoidData);
  689.  
  690.  
  691. /******************************************************************************
  692.  **                                                                             **
  693.  **                    General Polygon Data Structure Definitions                 **
  694.  **                                                                             **
  695.  *****************************************************************************/
  696.  
  697. typedef enum TQ3GeneralPolygonShapeHint {
  698.     kQ3GeneralPolygonShapeHintComplex,
  699.     kQ3GeneralPolygonShapeHintConcave,
  700.     kQ3GeneralPolygonShapeHintConvex
  701. } TQ3GeneralPolygonShapeHint;
  702.  
  703. typedef struct TQ3GeneralPolygonContourData {
  704.     unsigned long                    numVertices;        
  705.     TQ3Vertex3D                        *vertices;            
  706. } TQ3GeneralPolygonContourData;
  707.  
  708. typedef struct TQ3GeneralPolygonData {
  709.     unsigned long                    numContours;
  710.     TQ3GeneralPolygonContourData    *contours;
  711.     TQ3GeneralPolygonShapeHint        shapeHint;
  712.     TQ3AttributeSet                    generalPolygonAttributeSet;
  713. } TQ3GeneralPolygonData;
  714.  
  715.  
  716. /******************************************************************************
  717.  **                                                                             **
  718.  **                            General polygon Routines                         **
  719.  **                                                                             **
  720.  *****************************************************************************/
  721.  
  722. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3GeneralPolygon_New(
  723.     const TQ3GeneralPolygonData        *generalPolygonData);
  724.  
  725. QD3D_EXPORT TQ3Status QD3D_CALL Q3GeneralPolygon_Submit(
  726.      const TQ3GeneralPolygonData    *generalPolygonData,
  727.      TQ3ViewObject                    view);
  728.     
  729. QD3D_EXPORT TQ3Status QD3D_CALL Q3GeneralPolygon_SetData(
  730.     TQ3GeometryObject                generalPolygon, 
  731.     const TQ3GeneralPolygonData        *generalPolygonData);
  732.  
  733. QD3D_EXPORT TQ3Status QD3D_CALL Q3GeneralPolygon_GetData(
  734.     TQ3GeometryObject                polygon,
  735.     TQ3GeneralPolygonData            *generalPolygonData);
  736.  
  737. QD3D_EXPORT TQ3Status QD3D_CALL Q3GeneralPolygon_EmptyData(
  738.     TQ3GeneralPolygonData            *generalPolygonData);
  739.  
  740. QD3D_EXPORT TQ3Status QD3D_CALL Q3GeneralPolygon_GetVertexPosition(
  741.     TQ3GeometryObject                generalPolygon,
  742.     unsigned long                    contourIndex,
  743.     unsigned long                    pointIndex,
  744.     TQ3Point3D                        *position);
  745.  
  746. QD3D_EXPORT TQ3Status QD3D_CALL Q3GeneralPolygon_SetVertexPosition(
  747.     TQ3GeometryObject                generalPolygon,
  748.     unsigned long                    contourIndex,
  749.     unsigned long                    pointIndex,
  750.     const TQ3Point3D                *position);
  751.     
  752. QD3D_EXPORT TQ3Status QD3D_CALL Q3GeneralPolygon_GetVertexAttributeSet(
  753.     TQ3GeometryObject                generalPolygon,
  754.     unsigned long                    contourIndex,
  755.     unsigned long                    pointIndex,
  756.     TQ3AttributeSet                    *attributeSet);
  757.  
  758. QD3D_EXPORT TQ3Status QD3D_CALL Q3GeneralPolygon_SetVertexAttributeSet(
  759.     TQ3GeometryObject                generalPolygon,
  760.     unsigned long                    contourIndex,
  761.     unsigned long                    pointIndex,
  762.     TQ3AttributeSet                    attributeSet);
  763.  
  764. QD3D_EXPORT TQ3Status QD3D_CALL Q3GeneralPolygon_SetShapeHint(
  765.     TQ3GeometryObject                generalPolygon,
  766.     TQ3GeneralPolygonShapeHint        shapeHint);
  767.  
  768. QD3D_EXPORT TQ3Status QD3D_CALL Q3GeneralPolygon_GetShapeHint(
  769.     TQ3GeometryObject                generalPolygon,
  770.     TQ3GeneralPolygonShapeHint        *shapeHint);
  771.  
  772.  
  773. /******************************************************************************
  774.  **                                                                             **
  775.  **                        Line Data Structure Definitions                         **
  776.  **                                                                             **
  777.  *****************************************************************************/
  778.  
  779. typedef struct TQ3LineData {
  780.     TQ3Vertex3D            vertices[2];
  781.     TQ3AttributeSet        lineAttributeSet;
  782. } TQ3LineData;
  783.  
  784.  
  785. /******************************************************************************
  786.  **                                                                             **
  787.  **                            Line Routines                                     **
  788.  **                                                                             **
  789.  *****************************************************************************/
  790.  
  791. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3Line_New(
  792.     const TQ3LineData         *lineData);
  793.  
  794. QD3D_EXPORT TQ3Status QD3D_CALL Q3Line_Submit(
  795.     const TQ3LineData         *lineData, 
  796.     TQ3ViewObject             view);
  797.  
  798. QD3D_EXPORT TQ3Status QD3D_CALL Q3Line_GetData(
  799.     TQ3GeometryObject         line,
  800.     TQ3LineData             *lineData);
  801.     
  802. QD3D_EXPORT TQ3Status QD3D_CALL Q3Line_SetData(
  803.     TQ3GeometryObject         line,
  804.     const TQ3LineData         *lineData);
  805.     
  806. QD3D_EXPORT TQ3Status QD3D_CALL Q3Line_GetVertexPosition(
  807.     TQ3GeometryObject        line,
  808.     unsigned long            index,
  809.     TQ3Point3D                *position);
  810.  
  811. QD3D_EXPORT TQ3Status QD3D_CALL Q3Line_SetVertexPosition(
  812.     TQ3GeometryObject        line,
  813.     unsigned long            index,
  814.     const TQ3Point3D        *position);
  815.  
  816. QD3D_EXPORT TQ3Status QD3D_CALL Q3Line_GetVertexAttributeSet(
  817.     TQ3GeometryObject        line,
  818.     unsigned long            index,
  819.     TQ3AttributeSet            *attributeSet);
  820.  
  821. QD3D_EXPORT TQ3Status QD3D_CALL Q3Line_SetVertexAttributeSet(
  822.     TQ3GeometryObject        line,
  823.     unsigned long            index,
  824.     TQ3AttributeSet            attributeSet);
  825.     
  826. QD3D_EXPORT TQ3Status QD3D_CALL Q3Line_EmptyData(
  827.     TQ3LineData             *lineData);
  828.  
  829.  
  830. /******************************************************************************
  831.  **                                                                             **
  832.  **                        Marker Data Structure Definitions                     **
  833.  **                                                                             **
  834.  *****************************************************************************/
  835.  
  836. typedef struct TQ3MarkerData {
  837.     TQ3Point3D            location;
  838.     long                xOffset;
  839.     long                yOffset;
  840.     TQ3Bitmap            bitmap;
  841.     TQ3AttributeSet        markerAttributeSet;
  842. } TQ3MarkerData;
  843.  
  844.  
  845. /******************************************************************************
  846.  **                                                                             **
  847.  **                                Marker Routines                                 **
  848.  **                                                                             **
  849.  *****************************************************************************/
  850.  
  851. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3Marker_New(
  852.     const TQ3MarkerData        *markerData);
  853.  
  854. QD3D_EXPORT TQ3Status QD3D_CALL Q3Marker_Submit(
  855.     const TQ3MarkerData        *markerData,
  856.     TQ3ViewObject            view);
  857.     
  858. QD3D_EXPORT TQ3Status QD3D_CALL Q3Marker_SetData(
  859.     TQ3GeometryObject        geometry, 
  860.     const TQ3MarkerData        *markerData);
  861.  
  862. QD3D_EXPORT TQ3Status QD3D_CALL Q3Marker_GetData(
  863.     TQ3GeometryObject        geometry,
  864.     TQ3MarkerData            *markerData);
  865.  
  866. QD3D_EXPORT TQ3Status QD3D_CALL Q3Marker_EmptyData(
  867.     TQ3MarkerData            *markerData);
  868.     
  869. QD3D_EXPORT TQ3Status QD3D_CALL Q3Marker_GetPosition(
  870.     TQ3GeometryObject        marker,
  871.     TQ3Point3D                *location);
  872.  
  873. QD3D_EXPORT TQ3Status QD3D_CALL Q3Marker_SetPosition(
  874.     TQ3GeometryObject        marker,
  875.     const TQ3Point3D        *location);
  876.     
  877. QD3D_EXPORT TQ3Status QD3D_CALL Q3Marker_GetXOffset(
  878.     TQ3GeometryObject        marker,
  879.     long                    *xOffset);
  880.  
  881. QD3D_EXPORT TQ3Status QD3D_CALL Q3Marker_SetXOffset(
  882.     TQ3GeometryObject        marker,
  883.     long                    xOffset);
  884.  
  885. QD3D_EXPORT TQ3Status QD3D_CALL Q3Marker_GetYOffset(
  886.     TQ3GeometryObject        marker,
  887.     long                    *yOffset);
  888.  
  889. QD3D_EXPORT TQ3Status QD3D_CALL Q3Marker_SetYOffset(
  890.     TQ3GeometryObject        marker,
  891.     long                    yOffset);
  892.  
  893. QD3D_EXPORT TQ3Status QD3D_CALL Q3Marker_GetBitmap(
  894.     TQ3GeometryObject        marker,
  895.     TQ3Bitmap                *bitmap);
  896.  
  897. QD3D_EXPORT TQ3Status QD3D_CALL Q3Marker_SetBitmap(
  898.     TQ3GeometryObject        marker,
  899.     const TQ3Bitmap            *bitmap);
  900.  
  901.  
  902. /******************************************************************************
  903.  **                                                                             **
  904.  **                        Mesh Data Structure Definitions                         **
  905.  **                                                                             **
  906.  *****************************************************************************/
  907.  
  908. typedef struct TQ3MeshComponentPrivate     *TQ3MeshComponent;
  909. typedef struct TQ3MeshVertexPrivate     *TQ3MeshVertex;
  910. typedef struct TQ3MeshVertexPrivate     *TQ3MeshFace;
  911. typedef struct TQ3MeshEdgeRepPrivate     *TQ3MeshEdge;
  912. typedef struct TQ3MeshContourPrivate    *TQ3MeshContour;
  913.  
  914.  
  915. /******************************************************************************
  916.  **                                                                             **
  917.  **                            Mesh Routines                                      **
  918.  **                                                                             **
  919.  *****************************************************************************/
  920.  
  921. /*
  922.  *  Constructors
  923.  */
  924. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3Mesh_New(
  925.     void);
  926.  
  927. QD3D_EXPORT TQ3MeshVertex QD3D_CALL Q3Mesh_VertexNew(
  928.     TQ3GeometryObject    mesh,
  929.     const TQ3Vertex3D    *vertex);
  930.             
  931. QD3D_EXPORT TQ3MeshFace QD3D_CALL Q3Mesh_FaceNew(
  932.     TQ3GeometryObject    mesh,
  933.     unsigned long        numVertices,
  934.     const TQ3MeshVertex    *vertices,
  935.     TQ3AttributeSet        attributeSet);
  936.  
  937. /*
  938.  *  Destructors
  939.  */
  940. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_VertexDelete( 
  941.     TQ3GeometryObject    mesh,
  942.     TQ3MeshVertex        vertex);
  943.  
  944. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_FaceDelete(
  945.     TQ3GeometryObject    mesh,
  946.     TQ3MeshFace            face);
  947.  
  948. /*
  949.  * Methods
  950.  */
  951. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_DelayUpdates(
  952.     TQ3GeometryObject    mesh);
  953.  
  954. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_ResumeUpdates(
  955.     TQ3GeometryObject    mesh);
  956.     
  957. QD3D_EXPORT TQ3MeshContour QD3D_CALL Q3Mesh_FaceToContour(
  958.     TQ3GeometryObject    mesh,
  959.     TQ3MeshFace            containerFace,
  960.     TQ3MeshFace            face);
  961.     
  962. QD3D_EXPORT TQ3MeshFace QD3D_CALL Q3Mesh_ContourToFace(
  963.     TQ3GeometryObject    mesh,
  964.     TQ3MeshContour        contour);
  965.  
  966. /*
  967.  * Mesh
  968.  */
  969. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetNumComponents(
  970.     TQ3GeometryObject    mesh,
  971.     unsigned long        *numComponents);
  972.  
  973. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetNumEdges(
  974.     TQ3GeometryObject    mesh,
  975.     unsigned long        *numEdges);
  976.  
  977. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetNumVertices(
  978.     TQ3GeometryObject    mesh,
  979.     unsigned long        *numVertices);
  980.  
  981. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetNumFaces(
  982.     TQ3GeometryObject    mesh,
  983.     unsigned long        *numFaces);
  984.  
  985. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetNumCorners(
  986.     TQ3GeometryObject    mesh,
  987.     unsigned long        *numCorners);
  988.  
  989. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetOrientable(
  990.     TQ3GeometryObject    mesh,
  991.     TQ3Boolean            *orientable);
  992.  
  993. /*
  994.  * Component
  995.  */
  996. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetComponentNumVertices(
  997.     TQ3GeometryObject    mesh,
  998.     TQ3MeshComponent    component,
  999.     unsigned long        *numVertices);
  1000.  
  1001. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetComponentNumEdges(
  1002.     TQ3GeometryObject    mesh,
  1003.     TQ3MeshComponent    component,
  1004.     unsigned long        *numEdges);
  1005.  
  1006. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetComponentBoundingBox(
  1007.     TQ3GeometryObject    mesh,
  1008.     TQ3MeshComponent    component,
  1009.     TQ3BoundingBox        *boundingBox);
  1010.  
  1011. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetComponentOrientable(
  1012.     TQ3GeometryObject    mesh,
  1013.     TQ3MeshComponent    component,
  1014.     TQ3Boolean            *orientable);
  1015.  
  1016. /*
  1017.  * Vertex
  1018.  */
  1019. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetVertexCoordinates(
  1020.     TQ3GeometryObject    mesh,
  1021.     TQ3MeshVertex        vertex,
  1022.     TQ3Point3D            *coordinates);
  1023.  
  1024. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetVertexIndex(
  1025.     TQ3GeometryObject    mesh,
  1026.     TQ3MeshVertex        vertex,
  1027.     unsigned long        *index);
  1028.  
  1029. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetVertexOnBoundary(
  1030.     TQ3GeometryObject    mesh,
  1031.     TQ3MeshVertex        vertex,
  1032.     TQ3Boolean            *onBoundary);
  1033.  
  1034. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetVertexComponent(
  1035.     TQ3GeometryObject    mesh,
  1036.     TQ3MeshVertex        vertex,
  1037.     TQ3MeshComponent    *component);
  1038.  
  1039. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetVertexAttributeSet(
  1040.     TQ3GeometryObject    mesh,
  1041.     TQ3MeshVertex        vertex,
  1042.     TQ3AttributeSet        *attributeSet);
  1043.  
  1044.  
  1045. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_SetVertexCoordinates(
  1046.     TQ3GeometryObject    mesh,
  1047.     TQ3MeshVertex        vertex,
  1048.     const TQ3Point3D    *coordinates);
  1049.  
  1050. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_SetVertexAttributeSet(
  1051.     TQ3GeometryObject    mesh,
  1052.     TQ3MeshVertex        vertex,
  1053.     TQ3AttributeSet        attributeSet);
  1054.  
  1055. /*
  1056.  * Face
  1057.  */
  1058. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetFaceNumVertices(
  1059.     TQ3GeometryObject    mesh,
  1060.     TQ3MeshFace            face,
  1061.     unsigned long        *numVertices);
  1062.  
  1063. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetFacePlaneEquation(
  1064.     TQ3GeometryObject    mesh,
  1065.     TQ3MeshFace            face,
  1066.     TQ3PlaneEquation    *planeEquation);
  1067.  
  1068. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetFaceNumContours(
  1069.     TQ3GeometryObject    mesh,
  1070.     TQ3MeshFace            face,
  1071.     unsigned long        *numContours);
  1072.  
  1073. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetFaceIndex(
  1074.     TQ3GeometryObject    mesh,
  1075.     TQ3MeshFace            face,
  1076.     unsigned long        *index);
  1077.  
  1078. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetFaceComponent(
  1079.     TQ3GeometryObject    mesh,
  1080.     TQ3MeshFace            face,
  1081.     TQ3MeshComponent    *component);
  1082.  
  1083. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetFaceAttributeSet(
  1084.     TQ3GeometryObject    mesh,
  1085.     TQ3MeshFace            face,
  1086.     TQ3AttributeSet        *attributeSet);
  1087.  
  1088.  
  1089. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_SetFaceAttributeSet(
  1090.     TQ3GeometryObject    mesh,
  1091.     TQ3MeshFace            face,
  1092.     TQ3AttributeSet        attributeSet);
  1093.  
  1094. /*
  1095.  * Edge
  1096.  */
  1097. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetEdgeVertices(
  1098.     TQ3GeometryObject    mesh,
  1099.     TQ3MeshEdge            edge,
  1100.     TQ3MeshVertex        *vertex1,
  1101.     TQ3MeshVertex        *vertex2);
  1102.  
  1103. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetEdgeFaces(
  1104.     TQ3GeometryObject    mesh,
  1105.     TQ3MeshEdge            edge,
  1106.     TQ3MeshFace            *face1,
  1107.     TQ3MeshFace            *face2);
  1108.  
  1109. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetEdgeOnBoundary(
  1110.     TQ3GeometryObject    mesh,
  1111.     TQ3MeshEdge            edge,
  1112.     TQ3Boolean            *onBoundary);
  1113.  
  1114. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetEdgeComponent(
  1115.     TQ3GeometryObject    mesh,
  1116.     TQ3MeshEdge            edge,
  1117.     TQ3MeshComponent    *component);
  1118.  
  1119. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetEdgeAttributeSet(
  1120.     TQ3GeometryObject    mesh,
  1121.     TQ3MeshEdge            edge,
  1122.     TQ3AttributeSet        *attributeSet);
  1123.     
  1124.  
  1125. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_SetEdgeAttributeSet(
  1126.     TQ3GeometryObject    mesh,
  1127.     TQ3MeshEdge            edge,
  1128.     TQ3AttributeSet        attributeSet);
  1129.     
  1130. /*
  1131.  * Contour
  1132.  */
  1133. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetContourFace(
  1134.     TQ3GeometryObject    mesh,
  1135.     TQ3MeshContour        contour,
  1136.     TQ3MeshFace            *face);
  1137.  
  1138. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetContourNumVertices(
  1139.     TQ3GeometryObject    mesh,
  1140.     TQ3MeshContour        contour,
  1141.     unsigned long        *numVertices);
  1142.  
  1143. /*
  1144.  * Corner
  1145.  */
  1146. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetCornerAttributeSet(
  1147.     TQ3GeometryObject    mesh,
  1148.     TQ3MeshVertex        vertex,
  1149.     TQ3MeshFace            face,
  1150.     TQ3AttributeSet        *attributeSet);
  1151.  
  1152. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_SetCornerAttributeSet(
  1153.     TQ3GeometryObject    mesh,
  1154.     TQ3MeshVertex        vertex,
  1155.     TQ3MeshFace            face,
  1156.     TQ3AttributeSet        attributeSet);
  1157.  
  1158. /*
  1159.  * Public Mesh Iterators
  1160.  */
  1161. typedef struct TQ3MeshIterator {
  1162.     void                *var1;
  1163.     void                *var2;
  1164.     void                *var3;
  1165.     struct {
  1166.         void            *field1;
  1167.         char            field2[4];
  1168.     } var4;
  1169. } TQ3MeshIterator;
  1170.  
  1171. QD3D_EXPORT TQ3MeshComponent QD3D_CALL Q3Mesh_FirstMeshComponent(
  1172.     TQ3GeometryObject    mesh,
  1173.     TQ3MeshIterator        *iterator);
  1174.     
  1175. QD3D_EXPORT TQ3MeshComponent QD3D_CALL Q3Mesh_NextMeshComponent(
  1176.     TQ3MeshIterator        *iterator);
  1177.  
  1178. QD3D_EXPORT TQ3MeshVertex QD3D_CALL Q3Mesh_FirstComponentVertex(
  1179.     TQ3MeshComponent    component,
  1180.     TQ3MeshIterator        *iterator);
  1181.     
  1182. QD3D_EXPORT TQ3MeshVertex QD3D_CALL Q3Mesh_NextComponentVertex(
  1183.     TQ3MeshIterator        *iterator);
  1184.  
  1185. QD3D_EXPORT TQ3MeshEdge QD3D_CALL Q3Mesh_FirstComponentEdge(
  1186.     TQ3MeshComponent    component,
  1187.     TQ3MeshIterator        *iterator);
  1188.     
  1189. QD3D_EXPORT TQ3MeshEdge QD3D_CALL Q3Mesh_NextComponentEdge(
  1190.     TQ3MeshIterator        *iterator);
  1191.  
  1192. QD3D_EXPORT TQ3MeshVertex QD3D_CALL Q3Mesh_FirstMeshVertex(
  1193.     TQ3GeometryObject    mesh,
  1194.     TQ3MeshIterator        *iterator);
  1195.  
  1196. QD3D_EXPORT TQ3MeshVertex QD3D_CALL Q3Mesh_NextMeshVertex(
  1197.     TQ3MeshIterator        *iterator);
  1198.  
  1199. QD3D_EXPORT TQ3MeshFace QD3D_CALL Q3Mesh_FirstMeshFace(
  1200.     TQ3GeometryObject    mesh,
  1201.     TQ3MeshIterator        *iterator);
  1202.  
  1203. QD3D_EXPORT TQ3MeshFace QD3D_CALL Q3Mesh_NextMeshFace(
  1204.     TQ3MeshIterator        *iterator);
  1205.  
  1206. QD3D_EXPORT TQ3MeshEdge QD3D_CALL Q3Mesh_FirstMeshEdge(
  1207.     TQ3GeometryObject    mesh,
  1208.     TQ3MeshIterator        *iterator);
  1209.  
  1210. QD3D_EXPORT TQ3MeshEdge QD3D_CALL Q3Mesh_NextMeshEdge(
  1211.     TQ3MeshIterator        *iterator);
  1212.  
  1213. QD3D_EXPORT TQ3MeshEdge QD3D_CALL Q3Mesh_FirstVertexEdge(
  1214.     TQ3MeshVertex        vertex,
  1215.     TQ3MeshIterator        *iterator);
  1216.     
  1217. QD3D_EXPORT TQ3MeshEdge QD3D_CALL Q3Mesh_NextVertexEdge(
  1218.     TQ3MeshIterator        *iterator);
  1219.  
  1220. QD3D_EXPORT TQ3MeshVertex QD3D_CALL Q3Mesh_FirstVertexVertex(
  1221.     TQ3MeshVertex        vertex,
  1222.     TQ3MeshIterator        *iterator);
  1223.     
  1224. QD3D_EXPORT TQ3MeshVertex QD3D_CALL Q3Mesh_NextVertexVertex(
  1225.     TQ3MeshIterator        *iterator);
  1226.  
  1227. QD3D_EXPORT TQ3MeshFace QD3D_CALL Q3Mesh_FirstVertexFace(
  1228.     TQ3MeshVertex        vertex,
  1229.     TQ3MeshIterator        *iterator);
  1230.     
  1231. QD3D_EXPORT TQ3MeshFace QD3D_CALL Q3Mesh_NextVertexFace(
  1232.     TQ3MeshIterator        *iterator);
  1233.  
  1234. QD3D_EXPORT TQ3MeshEdge QD3D_CALL Q3Mesh_FirstFaceEdge(
  1235.     TQ3MeshFace            face,
  1236.     TQ3MeshIterator        *iterator);
  1237.     
  1238. QD3D_EXPORT TQ3MeshEdge QD3D_CALL Q3Mesh_NextFaceEdge(
  1239.     TQ3MeshIterator        *iterator);
  1240.  
  1241. QD3D_EXPORT TQ3MeshVertex QD3D_CALL Q3Mesh_FirstFaceVertex(
  1242.     TQ3MeshFace            face,
  1243.     TQ3MeshIterator        *iterator);
  1244.     
  1245. QD3D_EXPORT TQ3MeshVertex QD3D_CALL Q3Mesh_NextFaceVertex(
  1246.     TQ3MeshIterator        *iterator);
  1247.  
  1248. QD3D_EXPORT TQ3MeshFace QD3D_CALL Q3Mesh_FirstFaceFace(
  1249.     TQ3MeshFace            face,
  1250.     TQ3MeshIterator        *iterator);
  1251.     
  1252. QD3D_EXPORT TQ3MeshFace QD3D_CALL Q3Mesh_NextFaceFace(
  1253.     TQ3MeshIterator        *iterator);
  1254.  
  1255. QD3D_EXPORT TQ3MeshContour QD3D_CALL Q3Mesh_FirstFaceContour(
  1256.     TQ3MeshFace            face,
  1257.     TQ3MeshIterator        *iterator);
  1258.  
  1259. QD3D_EXPORT TQ3MeshContour QD3D_CALL Q3Mesh_NextFaceContour(
  1260.     TQ3MeshIterator        *iterator);
  1261.  
  1262. QD3D_EXPORT TQ3MeshEdge QD3D_CALL Q3Mesh_FirstContourEdge(
  1263.     TQ3MeshContour        contour,
  1264.     TQ3MeshIterator        *iterator);
  1265.     
  1266. QD3D_EXPORT TQ3MeshEdge QD3D_CALL Q3Mesh_NextContourEdge(
  1267.     TQ3MeshIterator        *iterator);
  1268.  
  1269. QD3D_EXPORT TQ3MeshVertex QD3D_CALL Q3Mesh_FirstContourVertex(
  1270.     TQ3MeshContour        contour,
  1271.     TQ3MeshIterator        *iterator);
  1272.     
  1273. QD3D_EXPORT TQ3MeshVertex QD3D_CALL Q3Mesh_NextContourVertex(
  1274.     TQ3MeshIterator        *iterator);
  1275.  
  1276. QD3D_EXPORT TQ3MeshFace QD3D_CALL Q3Mesh_FirstContourFace(
  1277.     TQ3MeshContour        contour,
  1278.     TQ3MeshIterator        *iterator);
  1279.     
  1280. QD3D_EXPORT TQ3MeshFace QD3D_CALL Q3Mesh_NextContourFace(
  1281.     TQ3MeshIterator        *iterator);
  1282.  
  1283. #define    Q3ForEachMeshComponent(m,c,i)                                        \
  1284.     for ( (c) = Q3Mesh_FirstMeshComponent((m),(i));                            \
  1285.           (c);                                                                \
  1286.           (c) = Q3Mesh_NextMeshComponent((i)) )
  1287.  
  1288. #define Q3ForEachComponentVertex(c,v,i)                                        \
  1289.     for ( (v) = Q3Mesh_FirstComponentVertex((c),(i));                        \
  1290.           (v);                                                                \
  1291.           (v) = Q3Mesh_NextComponentVertex((i)) )
  1292.           
  1293. #define Q3ForEachComponentEdge(c,e,i)                                        \
  1294.     for ( (e) = Q3Mesh_FirstComponentEdge((c),(i));                            \
  1295.           (e);                                                                \
  1296.           (e) = Q3Mesh_NextComponentEdge((i)) )
  1297.  
  1298. #define Q3ForEachMeshVertex(m,v,i)                                            \
  1299.     for ( (v) = Q3Mesh_FirstMeshVertex((m),(i));                            \
  1300.           (v);                                                                \
  1301.           (v) = Q3Mesh_NextMeshVertex((i)) )
  1302.  
  1303. #define Q3ForEachMeshFace(m,f,i)                                            \
  1304.     for ( (f) = Q3Mesh_FirstMeshFace((m),(i));                                \
  1305.           (f);                                                                \
  1306.           (f) = Q3Mesh_NextMeshFace((i)) )
  1307.  
  1308. #define Q3ForEachMeshEdge(m,e,i)                                            \
  1309.     for ( (e) = Q3Mesh_FirstMeshEdge((m),(i));                                \
  1310.           (e);                                                                \
  1311.           (e) = Q3Mesh_NextMeshEdge((i)) )
  1312.  
  1313. #define Q3ForEachVertexEdge(v,e,i)                                            \
  1314.     for ( (e) = Q3Mesh_FirstVertexEdge((v),(i));                            \
  1315.           (e);                                                                \
  1316.           (e) = Q3Mesh_NextVertexEdge((i)) )
  1317.  
  1318. #define Q3ForEachVertexVertex(v,n,i)                                        \
  1319.     for ( (n) = Q3Mesh_FirstVertexVertex((v),(i));                            \
  1320.           (n);                                                                \
  1321.           (n) = Q3Mesh_NextVertexVertex((i)) )
  1322.  
  1323. #define Q3ForEachVertexFace(v,f,i)                                            \
  1324.     for ( (f) = Q3Mesh_FirstVertexFace((v),(i));                            \
  1325.           (f);                                                                \
  1326.           (f) = Q3Mesh_NextVertexFace((i)) )
  1327.  
  1328. #define Q3ForEachFaceEdge(f,e,i)                                            \
  1329.     for ( (e) = Q3Mesh_FirstFaceEdge((f),(i));                                \
  1330.           (e);                                                                \
  1331.           (e) = Q3Mesh_NextFaceEdge((i)) )
  1332.  
  1333. #define Q3ForEachFaceVertex(f,v,i)                                            \
  1334.     for ( (v) = Q3Mesh_FirstFaceVertex((f),(i));                            \
  1335.           (v);                                                                \
  1336.           (v) = Q3Mesh_NextFaceVertex((i)) )
  1337.     
  1338. #define Q3ForEachFaceFace(f,n,i)                                            \
  1339.     for ( (n) = Q3Mesh_FirstFaceFace((f),(i));                              \
  1340.           (n);                                                                \
  1341.           (n) = Q3Mesh_NextFaceFace((i)) )
  1342.           
  1343. #define Q3ForEachFaceContour(f,h,i)                                            \
  1344.     for ( (h) = Q3Mesh_FirstFaceContour((f),(i));                            \
  1345.           (h);                                                                \
  1346.           (h) = Q3Mesh_NextFaceContour((i)) )
  1347.  
  1348. #define Q3ForEachContourEdge(h,e,i)                                            \
  1349.     for ( (e) = Q3Mesh_FirstContourEdge((h),(i));                            \
  1350.           (e);                                                                \
  1351.           (e) = Q3Mesh_NextContourEdge((i)) )
  1352.  
  1353. #define Q3ForEachContourVertex(h,v,i)                                        \
  1354.     for ( (v) = Q3Mesh_FirstContourVertex((h),(i));                            \
  1355.           (v);                                                                \
  1356.           (v) = Q3Mesh_NextContourVertex((i)) )
  1357.  
  1358. #define Q3ForEachContourFace(h,f,i)                                            \
  1359.     for ( (f) = Q3Mesh_FirstContourFace((h),(i));                            \
  1360.           (f);                                                                \
  1361.           (f) = Q3Mesh_NextContourFace((i)) )
  1362.  
  1363.  
  1364. /******************************************************************************
  1365.  **                                                                             **
  1366.  **                            Maximum order for NURB Curves                     **
  1367.  **                                                                             **
  1368.  *****************************************************************************/
  1369.  
  1370. #define kQ3NURBCurveMaxOrder    16
  1371.  
  1372.  
  1373. /******************************************************************************
  1374.  **                                                                             **
  1375.  **                            NURB CurveData Structure Definitions                         **
  1376.  **                                                                             **
  1377.  *****************************************************************************/
  1378.  
  1379. typedef struct TQ3NURBCurveData {
  1380.      unsigned long            order;
  1381.      unsigned long            numPoints;
  1382.      TQ3RationalPoint4D        *controlPoints;
  1383.      float                    *knots;
  1384.      TQ3AttributeSet            curveAttributeSet;
  1385. } TQ3NURBCurveData;
  1386.  
  1387.  
  1388. /******************************************************************************
  1389.  **                                                                             **
  1390.  **                                NURB Curve Routines                             **
  1391.  **                                                                             **
  1392.  *****************************************************************************/
  1393.  
  1394. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3NURBCurve_New(
  1395.     const TQ3NURBCurveData        *curveData);
  1396.  
  1397. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBCurve_Submit(
  1398.     const TQ3NURBCurveData        *curveData,
  1399.     TQ3ViewObject                view);
  1400.  
  1401. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBCurve_SetData(
  1402.     TQ3GeometryObject            curve, 
  1403.     const TQ3NURBCurveData        *nurbCurveData);
  1404.  
  1405. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBCurve_GetData(
  1406.     TQ3GeometryObject            curve,
  1407.     TQ3NURBCurveData            *nurbCurveData); 
  1408.  
  1409. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBCurve_EmptyData(
  1410.     TQ3NURBCurveData            *nurbCurveData);
  1411.  
  1412. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBCurve_SetControlPoint(
  1413.     TQ3GeometryObject            curve,
  1414.     unsigned long                pointIndex,
  1415.     const TQ3RationalPoint4D    *point4D);
  1416.     
  1417. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBCurve_GetControlPoint(
  1418.     TQ3GeometryObject            curve,
  1419.     unsigned long                pointIndex,
  1420.     TQ3RationalPoint4D            *point4D);
  1421.  
  1422. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBCurve_SetKnot(
  1423.     TQ3GeometryObject            curve,
  1424.     unsigned long                knotIndex,
  1425.     float                        knotValue);
  1426.  
  1427. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBCurve_GetKnot(
  1428.     TQ3GeometryObject            curve,
  1429.     unsigned long                knotIndex,
  1430.     float                        *knotValue);
  1431.  
  1432.  
  1433. /******************************************************************************
  1434.  **                                                                             **
  1435.  **                            Maximum NURB Patch Order                         **
  1436.  **                                                                             **
  1437.  *****************************************************************************/
  1438.  
  1439. #define    kQ3NURBPatchMaxOrder    11
  1440.  
  1441. /******************************************************************************
  1442.  **                                                                             **
  1443.  **                        NURB Patch Data Structure Definitions                 **
  1444.  **                                                                             **
  1445.  *****************************************************************************/
  1446.  
  1447. typedef struct TQ3NURBPatchTrimCurveData {
  1448.      unsigned long                    order;
  1449.      unsigned long                    numPoints;
  1450.      TQ3RationalPoint3D                *controlPoints;    
  1451.     float                            *knots;    
  1452. } TQ3NURBPatchTrimCurveData;
  1453.  
  1454. typedef struct TQ3NURBPatchTrimLoopData {
  1455.     unsigned long                    numTrimCurves;
  1456.     TQ3NURBPatchTrimCurveData        *trimCurves;
  1457. } TQ3NURBPatchTrimLoopData;
  1458.  
  1459. typedef struct TQ3NURBPatchData {
  1460.     unsigned long                        uOrder;
  1461.     unsigned long                    vOrder;
  1462.     unsigned long                    numRows;
  1463.     unsigned long                        numColumns;                                  
  1464.     TQ3RationalPoint4D                *controlPoints;
  1465.     float                            *uKnots; 
  1466.     float                            *vKnots;
  1467.     unsigned long                    numTrimLoops;
  1468.     TQ3NURBPatchTrimLoopData        *trimLoops;
  1469.     TQ3AttributeSet                    patchAttributeSet;
  1470. } TQ3NURBPatchData;
  1471.  
  1472.  
  1473. /******************************************************************************
  1474.  **                                                                             **
  1475.  **                                NURB Patch Routines                             **
  1476.  **                                                                             **
  1477.  *****************************************************************************/
  1478.  
  1479. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3NURBPatch_New(
  1480.     const TQ3NURBPatchData        *nurbPatchData);
  1481.  
  1482. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBPatch_Submit(
  1483.     const TQ3NURBPatchData        *nurbPatchData,
  1484.     TQ3ViewObject                view);
  1485.  
  1486. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBPatch_SetData(
  1487.     TQ3GeometryObject            nurbPatch, 
  1488.     const TQ3NURBPatchData        *nurbPatchData);
  1489.  
  1490. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBPatch_GetData(
  1491.     TQ3GeometryObject            nurbPatch, 
  1492.     TQ3NURBPatchData            *nurbPatchData);
  1493.  
  1494. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBPatch_SetControlPoint(
  1495.     TQ3GeometryObject            nurbPatch,
  1496.     unsigned long                rowIndex,
  1497.     unsigned long                columnIndex,
  1498.     const TQ3RationalPoint4D    *point4D);
  1499.  
  1500. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBPatch_GetControlPoint(
  1501.     TQ3GeometryObject            nurbPatch,
  1502.     unsigned long                rowIndex,
  1503.     unsigned long                columnIndex,
  1504.     TQ3RationalPoint4D            *point4D);
  1505.  
  1506. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBPatch_SetUKnot(
  1507.     TQ3GeometryObject            nurbPatch,
  1508.     unsigned long                knotIndex,
  1509.     float                        knotValue);
  1510.  
  1511. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBPatch_SetVKnot(
  1512.     TQ3GeometryObject            nurbPatch,
  1513.     unsigned long                knotIndex,
  1514.     float                        knotValue);
  1515.     
  1516. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBPatch_GetUKnot(
  1517.     TQ3GeometryObject            nurbPatch,
  1518.     unsigned long                knotIndex,
  1519.     float                        *knotValue);
  1520.  
  1521. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBPatch_GetVKnot(
  1522.     TQ3GeometryObject            nurbPatch,
  1523.     unsigned long                knotIndex,
  1524.     float                        *knotValue);
  1525.  
  1526. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBPatch_EmptyData(
  1527.     TQ3NURBPatchData            *nurbPatchData);
  1528.  
  1529.  
  1530. /******************************************************************************
  1531.  **                                                                             **
  1532.  **                        Pixmap Marker Data Structure Definitions             **
  1533.  **                                                                             **
  1534.  *****************************************************************************/
  1535.  
  1536. typedef struct TQ3PixmapMarkerData {
  1537.     TQ3Point3D            position;
  1538.     long                xOffset;
  1539.     long                yOffset;
  1540.     TQ3StoragePixmap    pixmap;
  1541.     TQ3AttributeSet        pixmapMarkerAttributeSet;
  1542. } TQ3PixmapMarkerData;
  1543.  
  1544.  
  1545. /******************************************************************************
  1546.  **                                                                             **
  1547.  **                                Pixmap Marker Routines                         **
  1548.  **                                                                             **
  1549.  *****************************************************************************/
  1550.  
  1551. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3PixmapMarker_New(
  1552.     const TQ3PixmapMarkerData    *pixmapMarkerData);
  1553.  
  1554. QD3D_EXPORT TQ3Status QD3D_CALL Q3PixmapMarker_Submit(
  1555.     const TQ3PixmapMarkerData    *pixmapMarkerData,
  1556.     TQ3ViewObject                view);
  1557.     
  1558. QD3D_EXPORT TQ3Status QD3D_CALL Q3PixmapMarker_SetData(
  1559.     TQ3GeometryObject            geometry, 
  1560.     const TQ3PixmapMarkerData    *pixmapMarkerData);
  1561.  
  1562. QD3D_EXPORT TQ3Status QD3D_CALL Q3PixmapMarker_GetData(
  1563.     TQ3GeometryObject            geometry,
  1564.     TQ3PixmapMarkerData            *pixmapMarkerData);
  1565.  
  1566. QD3D_EXPORT TQ3Status QD3D_CALL Q3PixmapMarker_EmptyData(
  1567.     TQ3PixmapMarkerData            *pixmapMarkerData);
  1568.     
  1569. QD3D_EXPORT TQ3Status QD3D_CALL Q3PixmapMarker_GetPosition(
  1570.     TQ3GeometryObject            pixmapMarker,
  1571.     TQ3Point3D                    *position);
  1572.  
  1573. QD3D_EXPORT TQ3Status QD3D_CALL Q3PixmapMarker_SetPosition(
  1574.     TQ3GeometryObject            pixmapMarker,
  1575.     const TQ3Point3D            *position);
  1576.     
  1577. QD3D_EXPORT TQ3Status QD3D_CALL Q3PixmapMarker_GetXOffset(
  1578.     TQ3GeometryObject            pixmapMarker,
  1579.     long                        *xOffset);
  1580.  
  1581. QD3D_EXPORT TQ3Status QD3D_CALL Q3PixmapMarker_SetXOffset(
  1582.     TQ3GeometryObject            pixmapMarker,
  1583.     long                        xOffset);
  1584.  
  1585. QD3D_EXPORT TQ3Status QD3D_CALL Q3PixmapMarker_GetYOffset(
  1586.     TQ3GeometryObject            pixmapMarker,
  1587.     long                        *yOffset);
  1588.  
  1589. QD3D_EXPORT TQ3Status QD3D_CALL Q3PixmapMarker_SetYOffset(
  1590.     TQ3GeometryObject            pixmapMarker,
  1591.     long                        yOffset);
  1592.  
  1593. QD3D_EXPORT TQ3Status QD3D_CALL Q3PixmapMarker_GetPixmap(
  1594.     TQ3GeometryObject            pixmapMarker,
  1595.     TQ3StoragePixmap            *pixmap);
  1596.  
  1597. QD3D_EXPORT TQ3Status QD3D_CALL Q3PixmapMarker_SetPixmap(
  1598.     TQ3GeometryObject            pixmapMarker,
  1599.     const TQ3StoragePixmap        *pixmap);
  1600.  
  1601.  
  1602. /******************************************************************************
  1603.  **                                                                             **
  1604.  **                        Point Data Structure Definitions                     **
  1605.  **                                                                             **
  1606.  *****************************************************************************/
  1607.  
  1608. typedef struct TQ3PointData {
  1609.     TQ3Point3D            point;
  1610.     TQ3AttributeSet        pointAttributeSet;
  1611. } TQ3PointData;
  1612.  
  1613.  
  1614. /******************************************************************************
  1615.  **                                                                             **
  1616.  **                                Point Routines                                 **
  1617.  **                                                                             **
  1618.  *****************************************************************************/
  1619.     
  1620. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3Point_New(
  1621.     const TQ3PointData         *pointData);
  1622.  
  1623. QD3D_EXPORT TQ3Status QD3D_CALL Q3Point_Submit(
  1624.     const TQ3PointData         *pointData,
  1625.     TQ3ViewObject             view);
  1626.     
  1627. QD3D_EXPORT TQ3Status QD3D_CALL Q3Point_GetData(
  1628.     TQ3GeometryObject         point,
  1629.     TQ3PointData            *pointData);
  1630.     
  1631. QD3D_EXPORT TQ3Status QD3D_CALL Q3Point_SetData(
  1632.     TQ3GeometryObject         point,
  1633.     const TQ3PointData         *pointData);
  1634.     
  1635. QD3D_EXPORT TQ3Status QD3D_CALL Q3Point_EmptyData(
  1636.     TQ3PointData             *pointData);    
  1637.     
  1638. QD3D_EXPORT TQ3Status QD3D_CALL Q3Point_SetPosition(
  1639.     TQ3GeometryObject        point,
  1640.     const TQ3Point3D        *position);
  1641.     
  1642. QD3D_EXPORT TQ3Status QD3D_CALL Q3Point_GetPosition(
  1643.     TQ3GeometryObject        point,
  1644.     TQ3Point3D                *position);
  1645.  
  1646.  
  1647. /******************************************************************************
  1648.  **                                                                             **
  1649.  **                        Polygon Data Structure Definitions                     **
  1650.  **                                                                             **
  1651.  *****************************************************************************/
  1652.  
  1653. typedef struct TQ3PolygonData {
  1654.     unsigned long        numVertices;        
  1655.     TQ3Vertex3D            *vertices;            
  1656.     TQ3AttributeSet        polygonAttributeSet;
  1657. } TQ3PolygonData;
  1658.  
  1659.  
  1660. /******************************************************************************
  1661.  **                                                                             **
  1662.  **                            Polygon Routines                                 **
  1663.  **                                                                             **
  1664.  *****************************************************************************/
  1665.  
  1666. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3Polygon_New(
  1667.     const TQ3PolygonData    *polygonData);
  1668.  
  1669. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polygon_Submit(
  1670.     const TQ3PolygonData    *polygonData,
  1671.     TQ3ViewObject            view);
  1672.     
  1673. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polygon_SetData(
  1674.     TQ3GeometryObject        polygon, 
  1675.     const TQ3PolygonData    *polygonData);
  1676.  
  1677. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polygon_GetData(
  1678.     TQ3GeometryObject        polygon,
  1679.     TQ3PolygonData            *polygonData);
  1680.  
  1681. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polygon_EmptyData(
  1682.     TQ3PolygonData            *polygonData);
  1683.  
  1684. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polygon_GetVertexPosition(
  1685.     TQ3GeometryObject        polygon,
  1686.     unsigned long            index,
  1687.     TQ3Point3D                *point);
  1688.  
  1689. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polygon_SetVertexPosition(
  1690.     TQ3GeometryObject        polygon,
  1691.     unsigned long            index,
  1692.     const TQ3Point3D        *point);
  1693.  
  1694. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polygon_GetVertexAttributeSet(
  1695.     TQ3GeometryObject        polygon,
  1696.     unsigned long            index,
  1697.     TQ3AttributeSet            *attributeSet);
  1698.  
  1699. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polygon_SetVertexAttributeSet(
  1700.     TQ3GeometryObject        polygon,
  1701.     unsigned long            index,
  1702.     TQ3AttributeSet            attributeSet);
  1703.  
  1704.  
  1705. /******************************************************************************
  1706.  **                                                                             **
  1707.  **                        Polyhedron Data Structure Definitions                 **
  1708.  **                                                                             **
  1709.  *****************************************************************************/
  1710.  
  1711. typedef enum TQ3PolyhedronEdgeMasks {
  1712.     kQ3PolyhedronEdgeNone    = 0,
  1713.     kQ3PolyhedronEdge01        = 1 << 0,
  1714.     kQ3PolyhedronEdge12        = 1 << 1,
  1715.     kQ3PolyhedronEdge20        = 1 << 2,
  1716.     kQ3PolyhedronEdgeAll    = kQ3PolyhedronEdge01     | 
  1717.                               kQ3PolyhedronEdge12    |
  1718.                               kQ3PolyhedronEdge20
  1719. } TQ3PolyhedronEdgeMasks;
  1720.  
  1721. typedef unsigned long TQ3PolyhedronEdge;
  1722.  
  1723. typedef struct TQ3PolyhedronEdgeData {
  1724.     unsigned long                vertexIndices[2];
  1725.     unsigned long                triangleIndices[2];
  1726.     TQ3AttributeSet                edgeAttributeSet;
  1727. } TQ3PolyhedronEdgeData;
  1728.     
  1729. typedef struct TQ3PolyhedronTriangleData {
  1730.     unsigned long                vertexIndices[3];
  1731.     TQ3PolyhedronEdge            edgeFlag;
  1732.     TQ3AttributeSet                triangleAttributeSet;
  1733. } TQ3PolyhedronTriangleData;
  1734.  
  1735. typedef struct TQ3PolyhedronData {
  1736.     unsigned long                numVertices;
  1737.     TQ3Vertex3D                    *vertices;
  1738.     unsigned long                numEdges;
  1739.     TQ3PolyhedronEdgeData        *edges;
  1740.     unsigned long                numTriangles;
  1741.     TQ3PolyhedronTriangleData    *triangles;
  1742.     TQ3AttributeSet                polyhedronAttributeSet;
  1743. } TQ3PolyhedronData;
  1744.  
  1745.  
  1746. /******************************************************************************
  1747.  **                                                                             **
  1748.  **                                Polyhedron Routines                             **
  1749.  **                                                                             **
  1750.  *****************************************************************************/
  1751.  
  1752. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3Polyhedron_New(
  1753.     const TQ3PolyhedronData        *polyhedronData);
  1754.  
  1755. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polyhedron_Submit(
  1756.     const TQ3PolyhedronData        *polyhedronData,
  1757.     TQ3ViewObject                view);
  1758.     
  1759. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polyhedron_SetData(
  1760.     TQ3GeometryObject            polyhedron, 
  1761.     const TQ3PolyhedronData        *polyhedronData);
  1762.  
  1763. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polyhedron_GetData(
  1764.     TQ3GeometryObject            polyhedron,
  1765.     TQ3PolyhedronData            *polyhedronData);
  1766.  
  1767. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polyhedron_EmptyData(
  1768.     TQ3PolyhedronData            *polyhedronData);
  1769.     
  1770. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polyhedron_SetVertexPosition(
  1771.     TQ3GeometryObject            polyhedron,
  1772.     unsigned long                index,
  1773.     const TQ3Point3D            *point);
  1774.     
  1775. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polyhedron_GetVertexPosition(
  1776.     TQ3GeometryObject            polyhedron,
  1777.     unsigned long                index,
  1778.     TQ3Point3D                    *point);
  1779.  
  1780. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polyhedron_SetVertexAttributeSet(
  1781.     TQ3GeometryObject            polyhedron,
  1782.     unsigned long                index,
  1783.     TQ3AttributeSet                attributeSet);
  1784.     
  1785. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polyhedron_GetVertexAttributeSet(
  1786.     TQ3GeometryObject            polyhedron,
  1787.     unsigned long                index,
  1788.     TQ3AttributeSet                *attributeSet);
  1789.  
  1790. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polyhedron_GetTriangleData(
  1791.     TQ3GeometryObject                polyhedron,
  1792.     unsigned long                    triangleIndex,
  1793.     TQ3PolyhedronTriangleData        *triangleData);
  1794.  
  1795. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polyhedron_SetTriangleData(
  1796.     TQ3GeometryObject                polyhedron,
  1797.     unsigned long                    triangleIndex,
  1798.     const TQ3PolyhedronTriangleData    *triangleData);
  1799.  
  1800. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polyhedron_GetEdgeData(
  1801.     TQ3GeometryObject            polyhedron,
  1802.     unsigned long                edgeIndex,
  1803.     TQ3PolyhedronEdgeData        *edgeData);
  1804.  
  1805. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polyhedron_SetEdgeData(
  1806.     TQ3GeometryObject            polyhedron,
  1807.     unsigned long                edgeIndex,
  1808.     const TQ3PolyhedronEdgeData    *edgeData);
  1809.  
  1810.  
  1811. /******************************************************************************
  1812.  **                                                                             **
  1813.  **                        PolyLine Data Structure Definitions                     **
  1814.  **                                                                             **
  1815.  *****************************************************************************/
  1816.  
  1817. typedef struct TQ3PolyLineData {
  1818.     unsigned long       numVertices;            
  1819.     TQ3Vertex3D            *vertices;                
  1820.     TQ3AttributeSet        *segmentAttributeSet;        
  1821.     TQ3AttributeSet        polyLineAttributeSet;        
  1822. } TQ3PolyLineData;
  1823.     
  1824.  
  1825. /******************************************************************************
  1826.  **                                                                             **
  1827.  **                            PolyLine Routines                                 **
  1828.  **                                                                             **
  1829.  *****************************************************************************/
  1830.  
  1831. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3PolyLine_New(
  1832.     const TQ3PolyLineData    *polylineData);
  1833.  
  1834. QD3D_EXPORT TQ3Status QD3D_CALL Q3PolyLine_Submit(
  1835.     const TQ3PolyLineData    *polyLineData,
  1836.     TQ3ViewObject            view);
  1837.     
  1838. QD3D_EXPORT TQ3Status QD3D_CALL Q3PolyLine_SetData(
  1839.     TQ3GeometryObject        polyLine, 
  1840.     const TQ3PolyLineData    *polyLineData);
  1841.  
  1842. QD3D_EXPORT TQ3Status QD3D_CALL Q3PolyLine_GetData(
  1843.     TQ3GeometryObject        polyLine,
  1844.     TQ3PolyLineData            *polyLineData);
  1845.  
  1846. QD3D_EXPORT TQ3Status QD3D_CALL Q3PolyLine_EmptyData(
  1847.     TQ3PolyLineData            *polyLineData);
  1848.         
  1849. QD3D_EXPORT TQ3Status QD3D_CALL Q3PolyLine_GetVertexPosition(
  1850.     TQ3GeometryObject        polyLine,
  1851.     unsigned long            index,
  1852.     TQ3Point3D                *position);
  1853.  
  1854. QD3D_EXPORT TQ3Status QD3D_CALL Q3PolyLine_SetVertexPosition(
  1855.     TQ3GeometryObject        polyLine,
  1856.     unsigned long            index,
  1857.     const TQ3Point3D        *position);
  1858.  
  1859. QD3D_EXPORT TQ3Status QD3D_CALL Q3PolyLine_GetVertexAttributeSet(
  1860.     TQ3GeometryObject        polyLine,
  1861.     unsigned long            index,
  1862.     TQ3AttributeSet            *attributeSet);
  1863.  
  1864. QD3D_EXPORT TQ3Status QD3D_CALL Q3PolyLine_SetVertexAttributeSet(
  1865.     TQ3GeometryObject        polyLine,
  1866.     unsigned long            index,
  1867.     TQ3AttributeSet            attributeSet);
  1868.  
  1869. QD3D_EXPORT TQ3Status QD3D_CALL Q3PolyLine_GetSegmentAttributeSet(
  1870.     TQ3GeometryObject        polyLine,
  1871.     unsigned long            index,
  1872.     TQ3AttributeSet            *attributeSet);
  1873.  
  1874. QD3D_EXPORT TQ3Status QD3D_CALL Q3PolyLine_SetSegmentAttributeSet(
  1875.     TQ3GeometryObject        polyLine,
  1876.     unsigned long            index,
  1877.     TQ3AttributeSet            attributeSet);
  1878.  
  1879.  
  1880. /******************************************************************************
  1881.  **                                                                             **
  1882.  **                        Torus Data Structure Definitions                     **
  1883.  **                                                                             **
  1884.  *****************************************************************************/
  1885.     
  1886. typedef struct TQ3TorusData {
  1887.     TQ3Point3D            origin;
  1888.     TQ3Vector3D            orientation;
  1889.     TQ3Vector3D            majorRadius;
  1890.     TQ3Vector3D            minorRadius;
  1891.     float                ratio;
  1892.     float                uMin, uMax,
  1893.                         vMin, vMax;
  1894.     TQ3EndCap            caps;
  1895.     TQ3AttributeSet        interiorAttributeSet;
  1896.     TQ3AttributeSet        torusAttributeSet;
  1897. } TQ3TorusData;
  1898.  
  1899.  
  1900. /******************************************************************************
  1901.  **                                                                             **
  1902.  **                                Torus Routines                                 **
  1903.  **                                                                             **
  1904.  *****************************************************************************/
  1905.  
  1906. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3Torus_New(
  1907.     const TQ3TorusData        *torusData);
  1908.  
  1909. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_Submit(
  1910.     const TQ3TorusData        *torusData, 
  1911.     TQ3ViewObject            view);
  1912.     
  1913. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_SetData(
  1914.     TQ3GeometryObject        torus, 
  1915.     const TQ3TorusData        *torusData);
  1916.  
  1917. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_GetData(
  1918.     TQ3GeometryObject        torus, 
  1919.     TQ3TorusData            *torusData);
  1920.  
  1921. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_SetOrigin(
  1922.     TQ3GeometryObject        torus,
  1923.     const TQ3Point3D        *origin);
  1924.  
  1925. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_SetOrientation(
  1926.     TQ3GeometryObject        torus,
  1927.     const TQ3Vector3D        *orientation);
  1928.  
  1929. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_SetMajorRadius(
  1930.     TQ3GeometryObject        torus,
  1931.     const TQ3Vector3D        *majorRadius);
  1932.  
  1933. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_SetMinorRadius(
  1934.     TQ3GeometryObject        torus,
  1935.     const TQ3Vector3D        *minorRadius);
  1936.  
  1937. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_SetRatio(
  1938.     TQ3GeometryObject        torus,
  1939.     float                    ratio);
  1940.  
  1941. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_GetOrigin(
  1942.     TQ3GeometryObject        torus,
  1943.     TQ3Point3D                *origin);
  1944.  
  1945. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_GetOrientation(
  1946.     TQ3GeometryObject        torus,
  1947.     TQ3Vector3D                *orientation);
  1948.  
  1949. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_GetMajorRadius(
  1950.     TQ3GeometryObject        torus,
  1951.     TQ3Vector3D                *majorRadius);
  1952.  
  1953. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_GetMinorRadius(
  1954.     TQ3GeometryObject        torus,
  1955.     TQ3Vector3D                *minorRadius);
  1956.  
  1957. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_GetRatio(
  1958.     TQ3GeometryObject        torus,
  1959.      float                    *ratio);
  1960.      
  1961. #if defined(ESCHER_VER_FUTURE) && ESCHER_VER_FUTURE
  1962.  
  1963. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_SetParameterLimits(
  1964.     TQ3GeometryObject        torus,
  1965.     const float                uMin,
  1966.     const float                uMax,
  1967.     const float                vMin,
  1968.     const float                vMax);
  1969.                             
  1970. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_GetParameterLimits(
  1971.     TQ3GeometryObject        torus,
  1972.     float                    *uMin,
  1973.     float                    *uMax,
  1974.     float                    *vMin,
  1975.     float                    *vMax);
  1976.                             
  1977. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_SetCaps(
  1978.     TQ3GeometryObject        torus,
  1979.     TQ3EndCap                caps);
  1980.  
  1981. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_GetCaps(
  1982.     TQ3GeometryObject        torus,
  1983.     TQ3EndCap                *caps);
  1984.  
  1985. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_SetInteriorAttributeSet(
  1986.     TQ3GeometryObject        torus,
  1987.     TQ3AttributeSet            interiorAttributeSet);
  1988.  
  1989. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_GetInteriorAttributeSet(
  1990.     TQ3GeometryObject        torus,
  1991.     TQ3AttributeSet            *interiorAttributeSet);
  1992.  
  1993. #endif  /*  ESCHER_VER_FUTURE  */
  1994.  
  1995. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_EmptyData(
  1996.     TQ3TorusData            *torusData);
  1997.  
  1998.  
  1999. /******************************************************************************
  2000.  **                                                                             **
  2001.  **                        Triangle Data Structure Definitions                     **
  2002.  **                                                                             **
  2003.  *****************************************************************************/
  2004.  
  2005. typedef struct TQ3TriangleData {
  2006.     TQ3Vertex3D            vertices[3];
  2007.     TQ3AttributeSet        triangleAttributeSet;
  2008. } TQ3TriangleData;
  2009.  
  2010.  
  2011. /******************************************************************************
  2012.  **                                                                             **
  2013.  **                            Triangle Routines                                 **
  2014.  **                                                                             **
  2015.  *****************************************************************************/
  2016.  
  2017. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3Triangle_New(
  2018.     const TQ3TriangleData    *triangleData);
  2019.  
  2020. QD3D_EXPORT TQ3Status QD3D_CALL Q3Triangle_Submit(
  2021.     const TQ3TriangleData    *triangleData,
  2022.     TQ3ViewObject            view);
  2023.     
  2024. QD3D_EXPORT TQ3Status QD3D_CALL Q3Triangle_SetData(
  2025.     TQ3GeometryObject        triangle, 
  2026.     const TQ3TriangleData    *triangleData);
  2027.  
  2028. QD3D_EXPORT TQ3Status QD3D_CALL Q3Triangle_GetData(
  2029.     TQ3GeometryObject        triangle,
  2030.     TQ3TriangleData            *triangleData);
  2031.  
  2032. QD3D_EXPORT TQ3Status QD3D_CALL Q3Triangle_EmptyData(
  2033.     TQ3TriangleData            *triangleData);
  2034.  
  2035. QD3D_EXPORT TQ3Status QD3D_CALL Q3Triangle_GetVertexPosition(
  2036.     TQ3GeometryObject        triangle,
  2037.     unsigned long            index,
  2038.     TQ3Point3D                *point);
  2039.  
  2040. QD3D_EXPORT TQ3Status QD3D_CALL Q3Triangle_SetVertexPosition(
  2041.     TQ3GeometryObject        triangle,
  2042.     unsigned long            index,
  2043.     const TQ3Point3D        *point);
  2044.  
  2045. QD3D_EXPORT TQ3Status QD3D_CALL Q3Triangle_GetVertexAttributeSet(
  2046.     TQ3GeometryObject        triangle,
  2047.     unsigned long            index,
  2048.     TQ3AttributeSet            *attributeSet);
  2049.  
  2050. QD3D_EXPORT TQ3Status QD3D_CALL Q3Triangle_SetVertexAttributeSet(
  2051.     TQ3GeometryObject        triangle,
  2052.     unsigned long             index,
  2053.     TQ3AttributeSet             attributeSet);
  2054.  
  2055.  
  2056. /******************************************************************************
  2057.  **                                                                             **
  2058.  **                        TriGrid Data Structure Definitions                     **
  2059.  **                                                                             **
  2060.  *****************************************************************************/
  2061.  
  2062. typedef struct TQ3TriGridData {
  2063.     unsigned long        numRows;            
  2064.     unsigned long        numColumns;
  2065.     TQ3Vertex3D            *vertices;            
  2066.     TQ3AttributeSet        *facetAttributeSet;
  2067.     TQ3AttributeSet        triGridAttributeSet;
  2068. } TQ3TriGridData;
  2069.  
  2070.  
  2071. /******************************************************************************
  2072.  **                                                                             **
  2073.  **                                TriGrid Routines                             **
  2074.  **                                                                             **
  2075.  *****************************************************************************/
  2076.  
  2077. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3TriGrid_New(
  2078.     const TQ3TriGridData    *triGridData);
  2079.  
  2080. QD3D_EXPORT TQ3Status QD3D_CALL Q3TriGrid_Submit(
  2081.     const TQ3TriGridData    *triGridData,
  2082.     TQ3ViewObject            view);
  2083.     
  2084. QD3D_EXPORT TQ3Status QD3D_CALL Q3TriGrid_SetData(
  2085.     TQ3GeometryObject        triGrid, 
  2086.     const TQ3TriGridData    *triGridData);
  2087.  
  2088. QD3D_EXPORT TQ3Status QD3D_CALL Q3TriGrid_GetData(
  2089.     TQ3GeometryObject        triGrid,
  2090.     TQ3TriGridData            *triGridData);
  2091.  
  2092. QD3D_EXPORT TQ3Status QD3D_CALL Q3TriGrid_EmptyData(
  2093.     TQ3TriGridData            *triGridData);
  2094.  
  2095. QD3D_EXPORT TQ3Status QD3D_CALL Q3TriGrid_GetVertexPosition(
  2096.     TQ3GeometryObject        triGrid,
  2097.     unsigned long            rowIndex,
  2098.     unsigned long            columnIndex,
  2099.     TQ3Point3D                *position);
  2100.  
  2101. QD3D_EXPORT TQ3Status QD3D_CALL Q3TriGrid_SetVertexPosition(
  2102.     TQ3GeometryObject        triGrid,
  2103.     unsigned long            rowIndex,
  2104.     unsigned long            columnIndex,
  2105.     const TQ3Point3D        *position);
  2106.  
  2107. QD3D_EXPORT TQ3Status QD3D_CALL Q3TriGrid_GetVertexAttributeSet(
  2108.     TQ3GeometryObject        triGrid,
  2109.     unsigned long            rowIndex,
  2110.     unsigned long            columnIndex,
  2111.     TQ3AttributeSet            *attributeSet);
  2112.  
  2113. QD3D_EXPORT TQ3Status QD3D_CALL Q3TriGrid_SetVertexAttributeSet(
  2114.     TQ3GeometryObject        triGrid,
  2115.     unsigned long            rowIndex,
  2116.     unsigned long            columnIndex,
  2117.     TQ3AttributeSet            attributeSet);
  2118.  
  2119. QD3D_EXPORT TQ3Status QD3D_CALL Q3TriGrid_GetFacetAttributeSet(
  2120.     TQ3GeometryObject        triGrid,
  2121.     unsigned long            faceIndex,
  2122.     TQ3AttributeSet            *facetAttributeSet);
  2123.  
  2124. QD3D_EXPORT TQ3Status QD3D_CALL Q3TriGrid_SetFacetAttributeSet(
  2125.     TQ3GeometryObject        triGrid,
  2126.     unsigned long            faceIndex,
  2127.     TQ3AttributeSet            facetAttributeSet);
  2128.  
  2129.  
  2130. /******************************************************************************
  2131.  **                                                                             **
  2132.  **                        TriMesh Data Structure Definitions                     **
  2133.  **                                                                             **
  2134.  *****************************************************************************/
  2135.  
  2136. typedef struct TQ3TriMeshTriangleData {
  2137.     unsigned long        pointIndices[3];
  2138. } TQ3TriMeshTriangleData;
  2139.  
  2140. typedef struct TQ3TriMeshEdgeData {
  2141.     unsigned long        pointIndices[2];
  2142.     unsigned long        triangleIndices[2];
  2143. } TQ3TriMeshEdgeData;
  2144.  
  2145. typedef struct TQ3TriMeshAttributeData {
  2146.     TQ3AttributeType    attributeType;        /* The type of attribute          */
  2147.     void                *data;                /* Pointer to the contiguous     */
  2148.                                             /* attribute data.                 */
  2149.     char                *attributeUseArray; /* This is only used with custom */
  2150.                                             /* attributes                      */
  2151. } TQ3TriMeshAttributeData;
  2152.  
  2153. typedef struct TQ3TriMeshData {
  2154.     TQ3AttributeSet                triMeshAttributeSet;
  2155.     
  2156.     unsigned long                numTriangles;
  2157.     TQ3TriMeshTriangleData        *triangles;
  2158.     
  2159.     unsigned long                numTriangleAttributeTypes;
  2160.     TQ3TriMeshAttributeData        *triangleAttributeTypes;
  2161.     
  2162.     unsigned long                numEdges;
  2163.     TQ3TriMeshEdgeData            *edges;
  2164.     
  2165.     unsigned long                numEdgeAttributeTypes;
  2166.     TQ3TriMeshAttributeData        *edgeAttributeTypes;
  2167.     
  2168.     unsigned long                numPoints;
  2169.     TQ3Point3D                    *points;
  2170.     
  2171.     unsigned long                numVertexAttributeTypes;
  2172.     TQ3TriMeshAttributeData        *vertexAttributeTypes;
  2173.  
  2174.     TQ3BoundingBox                bBox;
  2175. } TQ3TriMeshData;
  2176.  
  2177.  
  2178. /******************************************************************************
  2179.  **                                                                             **
  2180.  **                            TriMesh Routines                                 **
  2181.  **                                                                             **
  2182.  *****************************************************************************/
  2183.  
  2184. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3TriMesh_New(
  2185.     const TQ3TriMeshData    *triMeshData);
  2186.  
  2187. QD3D_EXPORT TQ3Status QD3D_CALL Q3TriMesh_Submit(
  2188.     const TQ3TriMeshData    *triMeshData,
  2189.     TQ3ViewObject            view);
  2190.     
  2191. QD3D_EXPORT TQ3Status QD3D_CALL Q3TriMesh_SetData(
  2192.     TQ3GeometryObject        triMesh, 
  2193.     const TQ3TriMeshData    *triMeshData);
  2194.  
  2195. QD3D_EXPORT TQ3Status QD3D_CALL Q3TriMesh_GetData(
  2196.     TQ3GeometryObject        triMesh,
  2197.     TQ3TriMeshData            *triMeshData);
  2198.  
  2199. QD3D_EXPORT TQ3Status QD3D_CALL Q3TriMesh_EmptyData(
  2200.     TQ3TriMeshData            *triMeshData);
  2201.     
  2202.  
  2203. #ifdef __cplusplus
  2204. }
  2205. #endif    /* __cplusplus */
  2206.  
  2207. #if defined(THINK_C) || defined(__SC__)
  2208.     #pragma SC options align=reset
  2209. #elif defined(__MWERKS__)
  2210.     #pragma enumsalwaysint reset
  2211.     #pragma align_array_members reset
  2212.     #pragma options align=reset
  2213. #elif  defined(__PPCC__)
  2214.     #pragma options align=reset
  2215. #elif defined(__xlc) || defined(__xlC) || defined(__xlC__) || defined(__XLC121__)
  2216.     #pragma options enum=reset
  2217. #endif
  2218.  
  2219. #endif  /* QD3DGeometry_h  */
  2220.